import { User } from '../models/User.js';
import { authenticateToken } from '../middleware/auth.js';
import { uploadAvatar } from '../middleware/upload.js';
import fs from 'fs';
import path from 'path';

const userModel = new User();

export class UserController {
  // 获取用户信息
  async getProfile(req, res) {
    try {
      const user = userModel.findById(req.userId);
      if (!user) {
        return res.status(404).json({ error: '用户不存在' });
      }

      const { password: _, ...userInfo } = user;
      res.json(userInfo);
    } catch (error) {
      console.error('获取用户信息失败:', error);
      res.status(500).json({ error: '获取用户信息失败' });
    }
  }

  // 更新用户信息
  async updateProfile(req, res) {
    try {
      const { email, phone } = req.body;
      const updatedUser = userModel.update(req.userId, { email, phone });

      if (!updatedUser) {
        return res.status(404).json({ error: '用户不存在' });
      }

      const { password: _, ...userInfo } = updatedUser;
      res.json(userInfo);
    } catch (error) {
      console.error('更新用户信息失败:', error);
      res.status(500).json({ error: '更新失败' });
    }
  }

  // 上传头像
  async uploadAvatar(req, res) {
    try {
      if (!req.file) {
        return res.status(400).json({ error: '没有上传文件' });
      }

      const user = userModel.findById(req.userId);
      if (!user) {
        fs.unlinkSync(req.file.path);
        return res.status(404).json({ error: '用户不存在' });
      }

      const avatarUrl = `/uploads/avatars/${req.file.filename}`;

      // 如果已有头像，删除旧文件
      if (user.avatar) {
        const oldAvatarPath = path.join(process.cwd(), user.avatar);
        if (fs.existsSync(oldAvatarPath)) {
          fs.unlinkSync(oldAvatarPath);
        }
      }

      const updatedUser = userModel.update(req.userId, { avatar: avatarUrl });

      if (updatedUser) {
        res.json({
          success: true,
          message: '头像上传成功',
          avatar: avatarUrl
        });
      } else {
        fs.unlinkSync(req.file.path);
        res.status(500).json({ error: '保存失败' });
      }
    } catch (error) {
      console.error('上传头像失败:', error);
      if (req.file && fs.existsSync(req.file.path)) {
        fs.unlinkSync(req.file.path);
      }
      res.status(500).json({ error: '上传失败: ' + error.message });
    }
  }

  // 删除头像
  async deleteAvatar(req, res) {
    try {
      const user = userModel.findById(req.userId);
      if (!user) {
        return res.status(404).json({ error: '用户不存在' });
      }

      // 删除头像文件
      if (user.avatar) {
        const avatarPath = path.join(process.cwd(), user.avatar);
        if (fs.existsSync(avatarPath)) {
          fs.unlinkSync(avatarPath);
        }
      }

      const updatedUser = userModel.update(req.userId, { avatar: null });

      if (updatedUser) {
        res.json({
          success: true,
          message: '头像删除成功'
        });
      } else {
        res.status(500).json({ error: '删除失败' });
      }
    } catch (error) {
      console.error('删除头像失败:', error);
      res.status(500).json({ error: '删除失败' });
    }
  }

  // 修改密码
  async changePassword(req, res) {
    try {
      const { currentPassword, newPassword } = req.body;

      if (!currentPassword || !newPassword) {
        return res.status(400).json({ error: '当前密码和新密码为必填字段' });
      }

      if (newPassword.length < 6) {
        return res.status(400).json({ error: '新密码长度至少6位' });
      }

      const user = userModel.findById(req.userId);
      if (!user) {
        return res.status(404).json({ error: '用户不存在' });
      }

      // 验证当前密码
      if (user.password !== currentPassword) {
        return res.status(400).json({ error: '当前密码错误' });
      }

      const updatedUser = userModel.update(req.userId, { password: newPassword });

      if (updatedUser) {
        res.json({
          success: true,
          message: '密码修改成功'
        });
      } else {
        res.status(500).json({ error: '密码修改失败' });
      }
    } catch (error) {
      console.error('修改密码失败:', error);
      res.status(500).json({ error: '修改失败' });
    }
  }

  // 获取用户活动记录
  async getActivity(req, res) {
    try {
      // 模拟活动数据
      const activities = [
        {
          id: 1,
          action: 'login',
          description: '用户登录系统',
          timestamp: new Date().toISOString(),
          ip: '192.168.1.100'
        },
        {
          id: 2,
          action: 'update_profile',
          description: '更新个人信息',
          timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),
          ip: '192.168.1.100'
        },
        {
          id: 3,
          action: 'view_students',
          description: '查看学生列表',
          timestamp: new Date(Date.now() - 5 * 60 * 60 * 1000).toISOString(),
          ip: '192.168.1.100'
        }
      ];

      res.json(activities);
    } catch (error) {
      console.error('获取用户活动失败:', error);
      res.status(500).json({ error: '获取失败' });
    }
  }
}